import { IDIterator, IIterator } from "../types";
import { DNode } from "./doubleLinkedLinkedList";
import { Node } from './singleLinkList'

// 抽象公共类接口
abstract class BaseLinkList<E> {
    abstract size(): number // 元素的数量
    abstract isEmpty(): boolean // 数组是否为空
    abstract contains(element: E): boolean // 是否包含元素element
    abstract add(element: E): void // 添加元素
    abstract unshift(element: E): number
    abstract shift(): E | undefined | null;
    abstract pop(): E | undefined | null;
    abstract get(indexE: number): Node<E> | undefined // 获取index处的元素
    abstract set(index: number, element: E): E // 修改对应index索引的元素
    abstract remove(index: number): E | null // 删除index索引的元素
    abstract indexOf(element: E): number // 从头开始检索元素的索引
    abstract clear(): void // 清除所有的元素 
    abstract forEach(cb: IIterator<E> | IDIterator<E>): void
}

export default BaseLinkList